/**
 * @param {number[]} arr
 * @param {number[][]} mat
 * @return {number}
 */
var firstCompleteIndex = function (arr, mat) {
  let res = arr.length - 1
  // 重新构建数组结构保留元素的原始索引值
  let arrWithIndex = arr.map((item, index) => {
    return {
      val: item,
      index: index
    }
  })
  // 按照值的顺序从小到大排序
  arrWithIndex.sort((a, b) => a.val - b.val)
  for (let i = 0; i < mat.length; i++) {
    let max_index = 0
    for (let j = 0; j < mat[0].length; j++) {
      if (arrWithIndex[mat[i][j] - 1].index > max_index) {
        max_index = arrWithIndex[mat[i][j] - 1].index
      }
    }
    if (max_index < res)
      res = max_index
  }
  for (let i = 0; i < mat[0].length; i++) {
    let max_index = 0
    for (let j = 0; j < mat.length; j++) {
      if (arrWithIndex[mat[j][i] - 1].index > max_index) {
        max_index = arrWithIndex[mat[j][i] - 1].index
      }
    }
    if (max_index < res)
      res = max_index
  }
  return res
}
/**
 * 思路：
 * 1、暴力破解（时间复杂度太高）
 * 2、根据arr和mat的特性，对arr进行排序（保留下标信息）
 *  然后对mat遍历的时候，可以直接通过mat的值直接找到在arr中的位置，而无须遍历arr（减少一层循环）
 */
console.log(firstCompleteIndex([2, 8, 7, 4, 1, 3, 5, 6, 9], [[3, 2, 5], [1, 4, 6], [8, 7, 9]]))